package com.king.classloader.filesystem;

import java.lang.reflect.Method;



public class ClassIdentity {

	public static void main(String[] args) {
		new ClassIdentity().testClassIdentity();
	}
	/**
	 * 使用了类 FileSystemClassLoader的两个不同实例来分别加载类 com.kingbird.classloader.sample.Sample，
	 * 得到了两个不同的 java.lang.Class的实例，接着通过 newInstance()方法分别生成了两个
	 * 类的对象 obj1和 obj2，最后通过 Java 的反射 API 在对象 obj1上调用方法 setSample，
	 * 试图把对象 obj2赋值给 obj1内部的 instance对象
	 */
	public void testClassIdentity() {
		String classDataRootPath = "/home/taomk/king-training/class-loader/target/classes";
		FileSystemClassLoader fscl1 = new FileSystemClassLoader(classDataRootPath);
		FileSystemClassLoader fscl2 = new FileSystemClassLoader(classDataRootPath);
		String className = "com.king.classloader.fileSystem.Sample";
		try {
			Class<?> class1 = fscl1.loadClass(className);
			Object obj1 = class1.newInstance();
			Class<?> class2 = fscl2.loadClass(className);
			Object obj2 = class2.newInstance();
			Method setSampleMethod = class1.getMethod("setSample", Object.class);
			setSampleMethod.invoke(obj1, obj2);
		} catch (Exception e) {
			e.printStackTrace();
		} 
	}
}
